// 引入 koa 并创建 Koa 实例
const Koa = require('koa');
const app = new Koa();

// 引入 koa-router 并创建路由实例
const KoaRouter = require('koa-router');
const router = new KoaRouter();

// 引入 bodyParser 为了解析请求体数据
const bodyparser = require('koa-bodyparser');
app.use(bodyparser());

// 导入执行 SQL 的方法
const query = require('./mysql');

// 写接口
// 获取发票列表
router.get('/invoices', async (ctx) => {
    // 执行查询 SQL
    const res = await query('select * from invoice');
    // 返回响应给前端
    ctx.body = {
        code: 200,
        data: res,
        message: '获取发票列表成功',
    };
});

// 获取单个发票信息
router.get('/invoices/:id', async (ctx) => {
    ctx.body = '获取单个发票信息';
});

// 添加发票
router.post('/invoices', async (ctx) => {
    // 解构请求体中参数
    let {
        type,
        name,
        sno,
        email = '',
        is_zy = 0,
        is_default = 0,
    } = ctx.request.body;
    // console.log({ type, name, sno, email, is_zy, is_default });

    // 发票类型必须指定
    if (!type || !['1', '2', '3'].includes(type)) {
        ctx.body = {
            code: 400,
            message: '未知的发票类型',
        };
        return;
    }

    // 发票抬头必须填写
    if (!name) {
        // 不管是【企业、非企业性单位、还是个人】，都需要填写发票抬头
        ctx.body = {
            code: 400,
            message: '必须填写发票抬头信息',
        };
        return;
    }

    // 校验邮箱格式
    // lstyr@outlook.com
    if (email && !/\w{1,}@\w{1,}\.com/.test(email)) {
        ctx.body = {
            code: 400,
            message: '邮箱格式不正确',
        };
    }

    // 如果发票类型是：企业，那么纳税人识别号必须填
    // 请求中发送的都是字符串，即使发送的是 1 也表示字符串的 '1'
    if (type === '1' && !sno) {
        ctx.body = {
            code: 400,
            message: '企业必须填写纳税人识别号',
        };
        return;
    }

    // 插入数据库
    const res = await query(
        'insert into invoice (type, name, sno, email, is_zy, is_default) values (?, ?, ?, ?, ?, ?)',
        [type, name, sno, email, is_zy, is_default],
    );
    console.log(res);

    // 判断是否插入成功
    if (res.affectedRows !== 1) {
        ctx.body = {
            code: 500,
            message: '添加发票失败',
        };
        return;
    }

    // 走到这里，说明成功了，返回成功响应
    ctx.body = {
        code: 201,
        message: '发票添加成功',
    };
});

// 修改发票信息
router.put('/invoices/:id', async (ctx) => {
    ctx.body = '修改发票信息';
});

// 删除发票
router.delete('/invoices/:id', async (ctx) => {
    ctx.body = '删除发票';
});

// 加载路由
app.use(router.routes());

// 监听端口
app.listen(3000, () => {
    console.log(`Koa server listening at http://localhost:3000`);
});
